The present disclosure relates generally to stack management, and more particularly to stack caching systems and methods with an active swapping mechanism.
In computer science, a stack machine is a computation model in which the memory takes the form of a stack. A stack machine also refers to an actual computer implementing or simulating the idealized stack machine. If a thread is switched to or a method is called, a corresponding stack is provided. Instructions store and retrieve an item on a stack based on the push-pop rule. An item is pushed onto the top of the stack, and an item popped off therefrom, moving the rest of the items in the stack up one level.
The efficiency of stack accessing is critical for a stack machine. For example, a Java virtual machine is a stack based machine. A Java stack comprises stack data, local variables, and virtual machine internal data. Since the memory space required for stacks is large, stacks are always stored in the normal memory with lower access speed. All computations of the Java virtual machine, however, are on the stacks. Therefore, storing stacks normal memory with lower access speed seriously reducing the processing efficiency of the Java virtual machine.
Several conventional mechanisms are provided to speed up the stack access. Harlan McGhan, Mike O'Connor have introduced a direct execution engine for Java bytecode (Java machine instructions), called PicoJava. PicoJava equips a circular buffer as stack cache, in which the bottom of the stack cache is adjacent to the top of the stack cache. New entries can be pushed on the top of a stack, growing the stack, and current entries can be popped off therefrom, shrinking the stack. If stack continues to grow and the number of entries pushed onto the stack cache exceeds the value of a high-water mark, a spill mechanism is performed, in which the oldest entry is scrubbed out to other stack memory. If entries are popped off the top of the stack and the number of entries in the stack cache falls below a low-water mark, a fill mechanism is performed, in which entries are copied from the stack memory to the stack cache. ARM Jazelle technology has introduced an architecture additionally equipped with up to four stack elements maintained in registers to reduce memory access to a minimum, in which stack spill and underflow is handled automatically by the hardware. In PicoJava and Jazelle technology, additional hardware must be provided.
Additionally, a conventional software solution has been provided to improve the processing efficiency of a stack machine, in which a JIT (just-in-time) or AOT (ahead-of-time) compiler transforms complex stack operations into simple register operations within CPU by translating bytecodes into machine code. The JIT or AOT compiler, however, compiles Java programs to generate machine code, increasing memory use.